<!doctype html>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script src="../assert_selection.js"></script>
<script>
const isMac = navigator.platform.indexOf('Mac') === 0;
function query_command_test(command, contents, expectedStates) {
  const expectedState = expectedStates[isMac ? 'mac' : 'other'];
  selection_test(
      `<div contenteditable>${contents}</div>`,
      selection => {
        assert_equals(
            selection.document.queryCommandState(command),
            expectedState,
            "State");
        assert_equals(
            selection.document.queryCommandValue(command),
            expectedState.toString(),
            "Value");
      },
      `<div contenteditable>${contents}</div>`,
      `queryCommandState(${command}) returns ${expectedState} when selecting ${contents}`);
}

query_command_test(
    'bold', '^hello|',
    {mac: false, other: false});
query_command_test(
    'bold', '^<i>hello</i>|',
    {mac: false, other: false});
query_command_test(
    'bold', '^<b>hello</b>|',
    {mac: true, other: true});
query_command_test(
    'bold', '^hello <b>world</b>|',
    {mac: false, other: false});
query_command_test(
    'bold', '^<b>hello</b> world|',
    {mac: true, other: false});
query_command_test(
    'bold', 'hello <b>^world</b> |Webkit',
    {mac: true, other: false});
query_command_test(
    'bold', '<b>hello</b> ^world| <b>WebKit</b>',
    {mac: false, other: false});
query_command_test(
    'bold', '<i>hello <b>^world</b> |WebKit</i>',
    {mac: true, other: false});
query_command_test(
    'bold', '<b>hello <i>^hello|</i> WebKit</b>',
    {mac: true, other: true});
query_command_test(
    'bold', '<b><div>hello <i>^hello|</i> WebKit</div></b>',
    {mac: true, other: true});
query_command_test(
    'bold', '^<b style="font-weight: normal;">hello</b>|',
    {mac: false, other: false});
query_command_test(
    'bold', '^<i style="font-weight: bold;">hello</i>|',
    {mac: true, other: true});
query_command_test(
    'bold', '^<b>hello</b> world <b>WebKit</b>|',
    {mac: true, other: false});
query_command_test(
    'bold', '^<b>hello</b><b> world</b>|',
    {mac: true, other: true});
query_command_test(
    'bold', '^<div><b>hello</b></div><p><b> WebKit</b></p>|',
    {mac: true, other: true});
query_command_test(
    'italic', '^hello|',
    {mac: false, other: false});
query_command_test(
    'italic', '^<b>hello</b>|',
    {mac: false, other: false});
query_command_test(
    'italic', '^<i>hello</i>|',
    {mac: true, other: true});
query_command_test(
    'italic', '^<i>hello</i> world|',
    {mac: true, other: false});
query_command_test(
    'italic', '^hello <i>world</i>|',
    {mac: false, other: false});
query_command_test(
    'italic', '^<i><div>hello world</div></i>|',
    {mac: true, other: true});
query_command_test(
    'italic',
    '^<div style="font-style: italic">hello <span style="font-style: normal;">hello</span></div>|',
    {mac: true, other: false});
query_command_test(
    'subscript', '^hello|',
    {mac: false, other: false});
query_command_test(
    'subscript', '^<sup>hello</sup>|',
    {mac: false, other: false});
query_command_test(
    'subscript', '^<sub>hello</sub>|',
    {mac: true, other: true});
query_command_test(
    'subscript', '^<sub>hello</sub> world|',
    {mac: true, other: false});
query_command_test(
    'subscript', '^hello <sub>world</sub>|',
    {mac: false, other: false});
query_command_test(
    'subscript', '^<div style="vertical-align: sub;">hello world</div>|',
    {mac: true, other: true});
query_command_test(
    'subscript', 'hello <span style="vertical-align: sub;">^world</span> |WebKit',
    {mac: true, other: false});
query_command_test(
    'superscript', '^hello|',
    {mac: false, other: false});
query_command_test(
    'superscript', '^<sub>hello</sub>|',
    {mac: false, other: false});
query_command_test(
    'superscript', '^<sup>hello</sup>|',
    {mac: true, other: true});
query_command_test(
    'superscript', '^<sup>hello</sup> world|',
    {mac: true, other: false});
query_command_test(
    'superscript', '^hello <sup>world</sup>|',
    {mac: false, other: false});
query_command_test(
    'superscript',
    '^<span style="vertical-align: super;">hello</span><span style="vertical-align: sub;">world</span>|',
    {mac: true, other: false});
query_command_test(
    'superscript', '^hello<span style="vertical-align: super;">world</span>|',
    {mac: false, other: false});
query_command_test(
    'underline', '^hello|',
    {mac: false, other: false});
query_command_test(
    'underline', '^<s>hello</s>|',
    {mac: false, other: false});
query_command_test(
    'underline', '^<u>hello</u>|',
    {mac: true, other: true});
query_command_test(
    'underline', '^<u>hello</u> world|',
    {mac: true, other: false});
query_command_test(
    'underline', '^hello <u>world</u>|',
    {mac: false, other: false});
query_command_test(
    'underline', '^<u><div>hello world</div></u>|',
    {mac: true, other: true});
query_command_test(
    'underline', '<u><s><div>hello ^world |WebKit</div></s></u>',
    {mac: true, other: true});
query_command_test(
    'underline', '<s><u>hello</u> ^world</s> |WebKit',
    {mac: false, other: false});
query_command_test(
    'underline', '<u><s>hello</s> ^world</u> |WebKit',
    {mac: true, other: false});
query_command_test(
    'underline', '<s>hello <u>^world|</u></s><u> WebKit</u>',
    {mac: true, other: true});
query_command_test(
    'strikeThrough', '^hello|',
    {mac: false, other: false});
query_command_test(
    'strikeThrough', '^<u>hello</u>|',
    {mac: false, other: false});
query_command_test(
    'strikeThrough', '^<s>hello</s>|',
    {mac: true, other: true});
query_command_test(
    'strikeThrough', '^<s>hello</s> world|',
    {mac: true, other: false});
query_command_test(
    'strikeThrough', '^hello <s>world</s>|',
    {mac: false, other: false});
query_command_test(
    'strikeThrough', '^<s><div>hello world</div></s>|',
    {mac: true, other: true});
query_command_test(
    'strikeThrough', '<s><u><div>hello ^world |WebKit</div></u></s>',
    {mac: true, other: true});
query_command_test(
    'strikeThrough', '<u><s>hello</s> ^world</u> |WebKit',
    {mac: false, other: false});
query_command_test(
    'strikeThrough', 'hello <s>^world |WebKit</s>',
    {mac: true, other: true});
query_command_test(
    'strikeThrough', 'hello^ <s>world |WebKit</s>',
    {mac: false, other: false});
</script>
